import type {ComponentOptionsMixin, DefineComponent, ExtractPropTypes, PublicProps} from "vue";

/**
 * Vue 组件的类型声明
 */
type VueComponent = DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<{}>>, {}, {}>

/**
 * 在父组件中进行组件注册的对象的类型声明
 */
type ComponentsRegister = {
    [prop: string]: VueComponent
}

/**
 * 根据组件数组生成用于在父组件中进行组件注册的对象
 *
 * @param componentList 组件数组
 * @return 用于在父组件中进行组件注册的对象
 */
export const genComponentRegisterObjByList = (componentList: VueComponent[]) => {
    // 用于在父组件中进行组件注册的对象
    const components: ComponentsRegister = {}
    // 生成用于在父组件中进行组件注册的对象
    componentList.forEach(item => {
        components[item.name] = item
    })
    return components
}